
package controlador;

import accesoDatos.DAOReportes;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;



public class ControladorReportes {
    private DAOReportes reportes=new DAOReportes();

    public ControladorReportes(){
       
    }

    public void documentosDescargadosPorTipoDeUsuario(int opcion)
    {
        if(opcion==0)
        {
            Vector<StringBuffer> resultados=reportes.documentosDescargadosPorTipoDeUsuario(opcion);
            String info="\nDocumentos descargados por tipo de usuario\n\n";
            pdfDescargadosPorTipoDeUsuario(resultados,info);
        }
        if(opcion==1)
        {
            Vector<StringBuffer> resultados=reportes.documentosDescargadosPorTipoDeUsuario(opcion);
            String info="\nDocumentos descargados por administradores\n\n";
            pdfDescargadosPorTipoDeUsuario(resultados,info);
        }
        if(opcion==2)
        {
            Vector<StringBuffer> resultados=reportes.documentosDescargadosPorTipoDeUsuario(opcion);
            String info="\nDocumentos descargados por catalogadores\n\n";
            pdfDescargadosPorTipoDeUsuario(resultados,info);

        }
        if(opcion==3)
        {
            Vector<StringBuffer> resultados=reportes.documentosDescargadosPorTipoDeUsuario(opcion);
            String info="\nDocumentos descargados por usuarios normales\n\n";
            pdfDescargadosPorTipoDeUsuario(resultados,info);
            
        }
    }
    
    public void pdfDescargadosPorTipoDeUsuario(Vector<StringBuffer> resultados, String info)
    {  
        FileOutputStream ficheroPdf = null;
        Document documento = new Document(PageSize.LETTER, 40, 30, 30, 30);
        try 
        {
            ficheroPdf = new FileOutputStream("fichero.pdf");
            PdfWriter.getInstance(documento, ficheroPdf).setInitialLeading(20);
            documento.open();
            
            Image foto = Image.getInstance("logo_biblioteca Digital.JPG");
            foto.scaleToFit(200,200);
            foto.setAlignment(Chunk.ALIGN_LEFT);
            
            Paragraph parrafo1=new Paragraph("Estadisticas de documentos",FontFactory.getFont("arial",16,Font.BOLDITALIC,BaseColor.BLACK));
            PdfPTable tabla3=new PdfPTable(1);
            Paragraph parrafo2=new Paragraph(info,FontFactory.getFont("arial",12,Font.ITALIC,BaseColor.BLACK));
            parrafo2.setAlignment(Chunk.ALIGN_JUSTIFIED);
            PdfPCell celda3=new PdfPCell(parrafo2);
            celda3.setBorder(0);
            celda3.setHorizontalAlignment(1);
            tabla3.addCell(celda3);
            
            PdfPCell celda=new PdfPCell(foto);
            celda.setBorderColor(BaseColor.WHITE);
            PdfPCell celda1=new PdfPCell(parrafo1);
            celda1.setBorderColor(BaseColor.WHITE); 
            
            PdfPTable tabla = new PdfPTable(2);
            tabla.setHorizontalAlignment(Chunk.ALIGN_JUSTIFIED);
            tabla.addCell( celda);
            tabla.addCell(celda1);
            
            /*Tabla de resultado de la consulta*/
            PdfPTable tabla1 = new PdfPTable(1);
            for(int i=0;i<resultados.size();i++)
            {
                if(i%2==0)
                {
                    Paragraph parrafo4=new Paragraph(resultados.get(i).toString(),FontFactory.getFont("arial", 12, Font.NORMAL, BaseColor.BLACK));
                    PdfPCell celda2=new PdfPCell(parrafo4);
                    celda2.setBorder(0);
                    celda2.setBackgroundColor(BaseColor.LIGHT_GRAY);
                    tabla1.addCell(celda2);
                }
                else
                {
                    Paragraph parrafo4=new Paragraph(resultados.get(i).toString(),FontFactory.getFont("arial", 12, Font.NORMAL, BaseColor.BLACK));
                    PdfPCell celda2=new PdfPCell(parrafo4);
                    celda2.setBorder(0);
                    celda2.setBackgroundColor(BaseColor.GRAY);
                    tabla1.addCell(celda2);
                }
            }
            
            PdfPTable tabla4=new PdfPTable(1);
            Paragraph parrafo3=new Paragraph("\ntotal registros: "+(resultados.size()-1)+"\n",FontFactory.getFont("arial",12,Font.ITALIC,BaseColor.BLACK));
            parrafo3.setAlignment(Chunk.ALIGN_JUSTIFIED);
            PdfPCell celda4=new PdfPCell(parrafo3);
            celda4.setBorder(0);
            celda4.setHorizontalAlignment(1); 
            tabla4.addCell(celda4);
            
            documento.add(tabla);
            documento.add(tabla3);
            documento.add(tabla1);
            documento.add(tabla4);
        }
        catch (Exception ex) 
        {
            Logger.getLogger(DAOReportes.class.getName()).log(Level.SEVERE, null, ex);
        } 
        finally 
        {
            try 
            {
                documento.close();
                ficheroPdf.close();
            } 
            catch (IOException ex) 
            {
                Logger.getLogger(DAOReportes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    public void documentosExistentesPorTipoDeFormato(String opcion)
    {
        if(opcion.equals("todos los formatos"))
        {
            Vector<StringBuffer> resultados=reportes.documentosExistentesPorTipoDeFormato(opcion);
            String info="\nDocumentos esxistentes por todos los formatos\n\n";
            pdfDescargadosPorTipoDeFormato(resultados,info);
        }
        else
        {
            Vector<StringBuffer> resultados=reportes.documentosExistentesPorTipoDeFormato(opcion);
            String info="\nDocumentos esxistentes en formatos : "+opcion+"\n\n";
            pdfDescargadosPorTipoDeFormato(resultados,info);
            
        }
        
    }
    
    public void pdfDescargadosPorTipoDeFormato(Vector<StringBuffer> resultados, String info)
    {  
        FileOutputStream ficheroPdf = null;
        Document documento = new Document(PageSize.LETTER, 40, 30, 30, 30);
        try 
        {
            ficheroPdf = new FileOutputStream("fichero.pdf");
            PdfWriter.getInstance(documento, ficheroPdf).setInitialLeading(20);
            documento.open();
            
            Image foto = Image.getInstance("logo_biblioteca Digital.JPG");
            foto.scaleToFit(200,200);
            foto.setAlignment(Chunk.ALIGN_LEFT);
            
            Paragraph parrafo1=new Paragraph("Estadisticas de documentos",FontFactory.getFont("arial",16,Font.BOLDITALIC,BaseColor.BLACK));
            PdfPTable tabla3=new PdfPTable(1);
            Paragraph parrafo2=new Paragraph(info,FontFactory.getFont("arial",12,Font.ITALIC,BaseColor.BLACK));
            parrafo2.setAlignment(Chunk.ALIGN_JUSTIFIED);
            PdfPCell celda3=new PdfPCell(parrafo2);
            celda3.setBorder(0);
            celda3.setHorizontalAlignment(1);
            tabla3.addCell(celda3);
            
            PdfPCell celda=new PdfPCell(foto);
            celda.setBorderColor(BaseColor.WHITE);
            PdfPCell celda1=new PdfPCell(parrafo1);
            celda1.setBorderColor(BaseColor.WHITE); 
            
            PdfPTable tabla = new PdfPTable(2);
            tabla.setHorizontalAlignment(Chunk.ALIGN_JUSTIFIED);
            tabla.addCell( celda);
            tabla.addCell(celda1);
            
            /*Tabla de resultado de la consulta*/
            PdfPTable tabla1 = new PdfPTable(1);
            for(int i=0;i<resultados.size();i++)
            {
                if(i%2==0)
                {
                    Paragraph parrafo4=new Paragraph(resultados.get(i).toString(),FontFactory.getFont("arial", 12, Font.NORMAL, BaseColor.BLACK));
                    PdfPCell celda2=new PdfPCell(parrafo4);
                    celda2.setBorder(0);
                    celda2.setBackgroundColor(BaseColor.LIGHT_GRAY);
                    tabla1.addCell(celda2);
                }
                else
                {
                    Paragraph parrafo4=new Paragraph(resultados.get(i).toString(),FontFactory.getFont("arial", 12, Font.NORMAL, BaseColor.BLACK));
                    PdfPCell celda2=new PdfPCell(parrafo4);
                    celda2.setBorder(0);
                    celda2.setBackgroundColor(BaseColor.GRAY);
                    tabla1.addCell(celda2);
                }
            }
            
            PdfPTable tabla4=new PdfPTable(1);
            Paragraph parrafo3=new Paragraph("\ntotal registros: "+(resultados.size()-1)+"\n",FontFactory.getFont("arial",12,Font.ITALIC,BaseColor.BLACK));
            parrafo3.setAlignment(Chunk.ALIGN_JUSTIFIED);
            PdfPCell celda4=new PdfPCell(parrafo3);
            celda4.setBorder(0);
            celda4.setHorizontalAlignment(1); 
            tabla4.addCell(celda4);
            
            documento.add(tabla);
            documento.add(tabla3);
            documento.add(tabla1);
            documento.add(tabla4);
        }
        catch (Exception ex) 
        {
            Logger.getLogger(DAOReportes.class.getName()).log(Level.SEVERE, null, ex);
        } 
        finally 
        {
            try 
            {
                documento.close();
                ficheroPdf.close();
            } 
            catch (IOException ex) 
            {
                Logger.getLogger(DAOReportes.class.getName()).log(Level.SEVERE, null, ex);
            } 
        }
    }  

    public static void main(String args[])
    {
        ControladorReportes controlador=new ControladorReportes();
        controlador.documentosDescargadosPorTipoDeUsuario(0);

    }
    

}
